﻿#define _CRT_SECURE_NO_WARNINGS 1


//#include<iostream>
//
//using namespace std;
//
//class Person
//{
//public:
//	virtual Person* BuyTicket()
//	{
//		cout << "买票全价" << endl;
//		return nullptr;
//	}
//};
//
//class Student : public Person
//{
//public:
//	virtual Student* BuyTicket()
//	{
//		cout << "买票优惠" << endl;
//		return nullptr;
//	}
//};
//
//void Func(Person* ptr)
//{
//	ptr->BuyTicket();
//}
//
//int main()
//{
//	Person p;
//	Student s;
//
//	Func(&p);
//	Func(&s);
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//class A
//{
//public:
//	virtual ~A()
//	{
//		cout << "~A()" << endl;
//	}
//};
//
//class B : public A
//{
//public:
//	~B()
//	{
//		cout << "~B()" << _p << endl;
//		delete _p;
//	}
//
//protected:
//	int* _p = new int[10];
//};
//
//int main()
//{
//	A* p1 = new A;
//	A* p2 = new B;
//
//	delete p1;
//	delete p2;
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//class A
//{
//public:
//	virtual void Func() final
//	{ }
//};
//
//class B : public A
//{
//public:
//	// // error C3248: “A::Func”: 声明为“final”的函数⽆法被“B::Func”重写
//	virtual void Func() override
//	{
//		cout << "void Func()" << endl;
//	}
//};
//
//int main()
//{
//
//
//	return 0;
//}


#include<iostream>

using namespace std;

class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func()
	{
		cout << "void Func()" << endl;
	}
};

int main()
{
	// 编译报错：error C2259: “A”: ⽆法实例化抽象类
	A a;
	
	return 0;
}